home *** CD-ROM | disk | FTP | other *** search
- * Programmheader
- *
- * Name: Unknown1
- * Author: SDI
- * Distribution: PD
- * Description: XFD external decruncher for Unknown Cruncher 1
- * Compileropts: -
- * Linkeropts: -
- *
- * 1.0 28.11.98 : first version
-
- INCLUDE "AINCLUDE:IncDirs.i"
- INCLUDE "lvo.i"
-
- INCLUDE "libraries/xfdmaster.i"
- INCLUDE "exec/memory.i"
-
- * head function for tests
- * INCLUDE "xfdExeHead.a"
-
- ForeMan MOVEQ #-1,D0
- RTS
-
- DC.L XFDF_ID
- DC.W 1,0
- DC.L 0,0,Slave1
-
- DC.B "$VER: Unknown1 1.0 (28.11.1998) by SDI",0
- N_Unknown1 DC.B 'Unknown Cruncher 1',0
- EVEN
-
- Slave1 DC.L 0 ;no more slaves
- DC.W 2 ;version
- DC.W 36 ;master version
- DC.L N_Unknown1 ;name
- DC.W XFDPFF_ADDR ;flags
- DC.W 0
- DC.L RB_Unknown1 ;recog buffer
- DC.L DB_Unknown1 ;decrunch buffer
- DC.L 0 ;recog segment
- DC.L 0 ;decrunch segment
- DC.W 0,0
- DC.L $68 ;MinBufSize
-
- *************************************************************************
- * Recog buffer function: receives buffer + length in A0/D0 *
- *************************************************************************
-
- RB_Unknown1 MOVEQ #0,D0 ; False
-
- CMP.L #$000003F3,(A0)
- BNE.B .No
- CMP.L #$21CC0080,$28(A0)
- BNE.B .No
- CMP.L #$548F4CDB,$3C(A0)
- BNE.B .No
- CMP.L #$D10050D3,$50(A0)
- BNE.B .No
- CMP.L #$02130087,$54(A0)
- BNE.B .No
- CMP.L #$7FFFFF1A,$64(A0)
- BNE.B .No
- MOVEQ #1,D0 ; True
- .No RTS
-
- *************************************************************************
- * Decrunch buffer function: receives xfdbiBufferInfo in A0 *
- *************************************************************************
-
- DB_Unknown1 MOVEM.L D2-D6/A2-A6,-(A7)
- MOVE.L A0,A5
- MOVE.W #XFDERR_NOMEMORY,xfdbi_Error(A5)
-
- MOVEA.L xfdbi_SourceBuffer(A5),A4
- MOVE.L $212(A4),D0
- SUB.L $216(A4),D0
- MOVE.L D0,D6
- MOVEQ #0,D1 * MEMF_ANY
- MOVEA.L xfdm_ExecBase(A6),A6
- JSR _LVOAllocMem(A6)
- MOVE.L D0,xfdbi_TargetBuffer(A5)
- BEQ.B .NoMem
-
- MOVE.W $21E(A4),D5
- MOVE.L $220(A4),xfdbi_DecrAddress(A5)
- MOVE.L $224(A4),xfdbi_JmpAddress(A5)
-
- MOVE.L D0,A1 * start of buffer
- LEA (A1,D6.L),A0 * end of buffer
- MOVE.L $21A(A4),D0
- LEA $21E(A4),A4
- LEA (A4,D0.L),A2 * end of source
-
- MOVE.L A6,-(A7)
- BSR.B Decrunch
- MOVEA.L A1,A4
- BSR.W DecrSize
- MOVEA.L (A7)+,A6
-
- MOVE.L D0,xfdbi_TargetBufSaveLen(A5)
- ADDQ.L #1,D0
- MOVE.L D0,xfdbi_TargetBufLen(A5)
- MOVE.L xfdbi_TargetBufMemType(A5),D1
- JSR _LVOAllocMem(A6)
- MOVE.W #XFDERR_NOMEMORY,xfdbi_Error(A5)
- MOVE.L D0,xfdbi_TargetBuffer(A5)
- BEQ.B .NoMem2
- MOVE.L D0,A1
- MOVEA.L A4,A0
- BSR.W Decrunch2
-
- CLR.W xfdbi_Error(A5)
-
- .NoMem2 MOVEA.L A4,A1
- MOVE.L D6,D0
- JSR _LVOFreeMem(A6)
-
- MOVE.W xfdbi_Error(A5),D0
- NOT.W D0
- .NoMem MOVEM.L (A7)+,D2-D6/A2-A6
- RTS
-
-
- *************************************************************************
- * decrunch routine - copied from file (a bit modified) *
- *************************************************************************
-
- Decrunch MOVEQ #$10,D4
- MOVE D4,CCR
- LEA SubJmp(PC),A4
- LEA .Decr12(PC),A3
- MOVE.L -(A2),D3
- .Decr1 MOVEQ #2,D0
- LEA .Decr2(PC),A6
- JMP (A4)
- .Decr2 CMPI.W #6,D1
- BCS.B .Decr8
- BEQ.B .Decr12
- LSL.L #1,D3
- BNE.B .Decr3
- MOVE.L -(A2),D3
- MOVE D4,CCR
- ROXL.L #1,D3
- .Decr3 BCC.B .Decr6
- MOVEQ #9,D0
- LEA .Decr4(PC),A6
- JMP (A4)
- .Decr4 SUBQ.W #1,D1
- BCC.B .Decr8
- MOVEQ #$000F,D0
- LEA .Decr5(PC),A6
- JMP (A4)
- .Decr5 LEA .Decr11(PC),A3
- BRA.B .Decr8
- .Decr6 MOVEQ #3,D0
- LEA .Decr7(PC),A6
- JMP (A4)
- .Decr7 ADDQ.W #6,D1
- .Decr8 MOVEQ #7,D0
- .Decr9 LSL.L #1,D3
- BEQ.B .Decr10
- ROXL.B #1,D2
- DBRA D0,.Decr9
- MOVE.B D2,-(A0)
- DBRA D1,.Decr8
- CMPA.L A0,A1
- BCC.W Finished
- JMP (A3)
- .Decr10 MOVE.L -(A2),D3
- LSL.L #1,D3
- ROXL.B #1,D2
- ADDQ.B #1,D3
- DBRA D0,.Decr9
- MOVE.B D2,-(A0)
- DBRA D1,.Decr8
- CMPA.L A0,A1
- BCC.W Finished
- JMP (A3)
- .Decr11 LEA .Decr12(PC),A3
- BRA.B .Decr1
- .Decr12 MOVEQ #1,D0
- LEA .Decr13(PC),A6
- JMP (A4)
- .Decr13 MOVEQ #7,D0
- MOVEQ #1,D2
- TST.W D1
- BEQ.B .Decr25
- MOVEQ #3,D2
- CMPI.W #2,D1
- BEQ.B .Decr22
- CMPI.W #3,D1
- BEQ.B .Decr15
- MOVEQ #2,D2
- LSL.L #1,D3
- BNE.B .Decr14
- MOVE.L -(A2),D3
- MOVE D4,CCR
- ROXL.L #1,D3
- .Decr14 BCC.B .Decr25
- MOVEQ #$000D,D0
- BRA.B .Decr25
- .Decr15 MOVEQ #1,D0
- LEA .Decr16(PC),A6
- JMP (A4)
- .Decr16 CMPI.W #2,D1
- BCC.B .Decr17
- ADDQ.W #4,D1
- BRA.B .Decr21
- .Decr17 CMPI.W #3,D1
- BEQ.B .Decr19
- MOVEQ #1,D0
- LEA .Decr18(PC),A6
- JMP (A4)
- .Decr18 ADDQ.W #6,D1
- BRA.B .Decr21
- .Decr19 MOVEQ #7,D0
- LEA .Decr20(PC),A6
- JMP (A4)
- .Decr20 ADDI.W #$000A,D1
- .Decr21 MOVE.W D1,D2
- .Decr22 MOVEQ #$000F,D0
- LSL.L #1,D3
- BNE.B .Decr23
- MOVE.L -(A2),D3
- MOVE D4,CCR
- ROXL.L #1,D3
- .Decr23 BCS.B .Decr25
- MOVEQ #$000B,D0
- LSL.L #1,D3
- BNE.B .Decr24
- MOVE.L -(A2),D3
- MOVE D4,CCR
- ROXL.L #1,D3
- .Decr24 BCS.B .Decr25
- MOVEQ #7,D0
- .Decr25 LEA .Decr26(PC),A6
- JMP (A4)
- .Decr26 ADDQ.L #1,D1
- .Decr27 MOVE.B -1(A0,D1.L),-(A0)
- DBRA D2,.Decr27
- CMPA.L A0,A1
- BCS.W .Decr1
- Finished RTS
-
- SubJmp MOVEQ #0,D1
- .SubLoop LSL.L #1,D3
- BEQ.B .Skip
- ROXL.W #1,D1
- DBRA D0,.SubLoop
- JMP (A6)
- .Skip MOVE.L -(A2),D3
- LSL.L #1,D3
- ROXL.W #1,D1
- ADDQ.B #1,D3
- DBRA D0,.SubLoop
- JMP (A6)
-
- DecrSize MOVEQ #0,D0
- .Size1 MOVE.B (A0)+,D1
- ADDQ.L #1,D0
- CMP.B D5,D1
- BNE.B .Size1
- MOVEQ #0,D1
- MOVE.B (A0)+,D1
- BEQ.B .Size1 * char + 0 --> means char
- SUBQ.L #1,D0
- CMPI.B #1,D1 * char + 1 --> means end
- BEQ.B .End
- ADDQ.L #1,D1
- ADD.L D1,D0 * char + x + a --> means (x+1) * a
- MOVE.B (A0)+,D1
- BRA.B .Size1
- .End RTS
-
- Decrunch2
- .Dec1 MOVE.B (A0)+,D1
- MOVE.B D1,(A1)+
- CMP.B D5,D1
- BNE.B .Dec1
- MOVE.B (A0)+,D1
- BEQ.B .Dec1
- SUBQ.L #1,A1
- CMPI.B #1,D1
- BEQ.B .End
- ANDI.W #$FF,D1
- MOVE.B (A0)+,D2
- .Dec2 MOVE.B D2,(A1)+
- DBRA D1,.Dec2
- BRA.B .Dec1
- .End RTS
- END
-